{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Using the C12 emulator\n", "C12 Callisto is software that emulates our real quantum machine in development.\n", "It is made on top of the Qiskit library with a proprietary noise model corresponding to our system and with the physical parameters of real devices.\n", "This offers realistic noisy simulations of runs on real devices.\n", "All the errors that occur during the execution of a quantum circuit have been modelled in the emulator.\n", "\n", "Quantum errors are due to decoherence channels.\n", "This first version includes decoherence from charge noise, from phonon noise and from relaxation of the qubit through its quantum bus, a microwave resonator.\n", "Callisto offers additional features like mid-circuit measurement and noisy initialization.\n", "The quantum gate set of the current configuration is $R_X$, $R_Y$ and $R_Z$ for the 1Q gates and ISWAP for the 2Q gate.\n", "Any other gate will be transpiled into this basis gate set.\n", "\n", "Callisto's physical parameters are based on the first quantum chip that C12 will fabricate & release.\n", "For the moment, we offer one fixed configuration of the C12 emulator.\n", "The chosen configuration leads to the following fidelities.\n", "\n", "### Running a quantum circuit\n", "To run the circuits on the C12 emulator, first, it is mandatory to obtain the authentication token that will be used for connection to the remote server where our emulator is. So don't hesitate to contact the system administrator to get one.\n", "\n", "A token is set via UserConfig class, as shown in the example bellow. UserConfig class has other properties, like more detailed out, which can be set by setting the parameter \"verbose\" to True. One important remark is that the object of the `UserConfig` class is passed to the provider instance, so for any change to take effect one has to reinitialize the provider.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As mentioned in the first tutorial, the provided class contains information about available backends that can be used for running the circuit. Furthermore, the available ones can be viewed using the `backends()` method of the provider class (recall that this applies to every Qiskit's provider class, as its sole purpose is to provide access to backends).\n", "\n" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Backend data {'backend_name': 'c12sim', 'local': False, 'simulator': True, 'basis_gates': ['crx', 'rx', 'ry', 'rz'], 'description': 'C12 simulator', 'n_qubits': 13, 'conditional': False, 'max_shots': 100000, 'memory': False, 'open_pulse': False, 'max-circuits': 1}\n" ] } ], "source": [ "# UserConfig class\n", "from c12_callisto_clients.user_configs import UserConfigs\n", "import os\n", "user_auth_token = os.getenv(\"C12_TOKEN\")\n", "configs = UserConfigs.parse_obj({\"token\" : user_auth_token})\n", "\n", "from c12_callisto_clients.qiskit.c12sim_provider import C12SimProvider\n", "c12_simulator_provider = C12SimProvider(configs)\n", "c12_backends = c12_simulator_provider.backends()\n", "\n", "\n", "print(f\"Backend data {c12_backends[0]}\")\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We have to call the `get_backend()` function to get the instance of a chosen backend. To the `get_backend()` function, we pass the name of the desired backend we need to obtain." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "c12_simulator_backend_iswap = c12_simulator_provider.get_backend('c12sim-iswap') # Basis gate set with iSWAP gate\n", "print(c12_simulator_backend_iswap)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finally, we will run a quantum circuit on the C12 simulator. We will create one circuit using the Qiskit QuantumCircuit class to do that. Then, using the obtained C12 simulator backend class, we will run the circuit using the `run()` method.\n", "\n", "Method `run()` can have an additional parameter, such as the number of shots (number of times the simulation is run).\n", "Also, recall that after calling the `run()` method, we get an instance of a Job class.\n", "Additionally, it could take some time for the simulation to finish. Usually, the time is less than one minute, but it depends on the circuit and the server load at that moment.\n", "\n", "Furthermore, in the sixth notebook it is shown that we can pass physical parameters to the `run()` method in order to run the simulation with different physical system." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "C12 simulation counts (iSWAP): {'00': 5026, '01': 11, '10': 16, '11': 4947}\n" ] } ], "source": [ "from qiskit import QuantumCircuit\n", "\n", "circuit = QuantumCircuit(2)\n", "circuit.h(0)\n", "circuit.cx(0, 1)\n", "\n", "c12_job_iswap = c12_simulator_backend_iswap.run(circuit, shots=10000)\n", "c12_result_iswap = c12_job_iswap.result()\n", "c12_counts_iswap = c12_result_iswap.get_counts()\n", "print(f\"C12 simulation counts (iSWAP): {c12_counts_iswap}\")" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "# We will also run the same circuit on the Aer statevector simulator to obtain the perfect results.\n", "from qiskit import Aer\n", "\n", "backend_aer = Aer.get_backend(\"statevector_simulator\")\n", "result_aer = backend_aer.run(circuit, shots=10000).result()\n", "counts_aer = result_aer.get_counts()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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uDg0aNCg2DYdHR2RnZ2NlJQUqczKygomJia4e/euUn1BEPDZZ58hODi42Pb27NmDkSNHYsOGDejcuTM2b96MrVu3Ijo6Go6Ojkr1w8PD4e3tjZs3byqck7p161Zo/TciIm15/3n5syAnJwd37tyREu+XTVhTZaGU2zczKrf/lStX8J///Afh4eFISkqCrq4umjRpAn9/f4wfPx61a9cGAERERCA0NBSXLl3C1atXkZeXhzt37sDJyUmhvVu3bmHLli04deoUYmNjoaOjAzc3N8ycORNDhgypXLAaUvT7eOrUKXTv3r1C+0ZHR2Pv3r0YPXq00rnSZmX933gRR2CrqWfPniEzMxP9+/dXKHdzc8P169dL3bdRo0aQyWSoXbs2Vq9erbAtMTERnTt3Vijr0qULEhISVIpz9erVGDduHMaPHw83NzesWbMG9evXx8aNG0vdz9raGra2ttIPk1ei6qciU5hetHHjRgiCIN1VXCQrKws9evSQ2jQyMsKSJUsU6ujq6hY7StqyZUulfvj+Uz198803aNeuHS5evIg5c+bgyJEj+OmnnzB06FBs2rQJ48aNk+qeOHECx48fh6OjIzw9PUts8+jRowgLC8PgwYOxb98+/PDDD2jcuDGGDh2Kzz///FUcVrUSHR2NoKAgxMXFaToUjWECW03dunULANCwYUOFcmtra2RlZRW7j6urK0aOHInQ0FBs3LgR9vb2+Pjjj/H1119LdQoKCuDg4KCwn4ODAwoKCiocY15eHv766y/4+voqlPv6+uL3338vdd82bdrAzs4OPj4+OHXqVIX7JqKqpeoUpnv37mH69OnFLg/l7e2N06dPY8GCBTh16hTeeustLFy4ELt27ZLq/PPPPwpToJYtWwYACkkPwPef6ioyMhIffPABevbsib/++gtTpkxB9+7d0atXL8ydOxc3btzAmDFjpPoLFy5EXFwcfvrpJ/Tr16/Edv39/REdHY158+ahV69e6Nu3L0JDQ9GvXz8sW7YMubm5r+LwXnsl5RfVERPYau7lO/JEUSzxLr2+fftix44dGDFiBCZOnIirV6/C2toaX3zxhUK9lx9lqOosktTUVBQUFMDGxkah3MbGBsnJycXuY2dnhy1btuDHH3/E/v374erqCh8fH5w5c0alGIioamzbtg3NmjXD9u3b0b9/f1y6dAn6+vqYNWtWqft1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\n", "text/plain": [ "
" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Make comparison\n", "from qiskit.visualization import plot_histogram\n", "iswap = {}\n", "for key, value in c12_counts_iswap.items():\n", " iswap[key.strip()] = value\n", "data = [iswap, counts_aer]\n", "plot_histogram(data,\n", " legend=['C12 emulator', 'Perfect emulator'],\n", " title=\"Emulators comparison\",\n", " figsize=(5, 5))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Grover algorithm example\n", "\n", "The Grover algorithm, also known as Grover's search algorithm, is a quantum algorithm that can be used to search an unsorted database or find a specific database entry faster than classical algorithms. It is one of the earliest quantum algorithms.\n", "\n", "The algorithm works by starting with a superposition of all possible states and then applying a series of operations to amplify the amplitude of the state corresponding to the desired item. As a result, the algorithm achieves a quadratic speedup over classical algorithms, which means that it can search a database of N items in O($\\sqrt{N}$) time, compared to O(N) time for classical algorithms.\n", "\n", "First, we will create an groover circuit with a two qubits." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from qiskit import QuantumRegister\n", "\n", "qreg_q = QuantumRegister(2, 'q')\n", "groover_circuit = QuantumCircuit(qreg_q)\n", "\n", "groover_circuit.h(qreg_q[1])\n", "groover_circuit.h(qreg_q[0])\n", "groover_circuit.x(qreg_q[1])\n", "groover_circuit.x(qreg_q[0])\n", "groover_circuit.cz(qreg_q[0], qreg_q[1])\n", "groover_circuit.x(qreg_q[0])\n", "groover_circuit.x(qreg_q[1])\n", "groover_circuit.h(qreg_q[0])\n", "groover_circuit.h(qreg_q[1])\n", "groover_circuit.z(qreg_q[0])\n", "groover_circuit.z(qreg_q[1])\n", "groover_circuit.cz(qreg_q[0], qreg_q[1])\n", "groover_circuit.h(qreg_q[0])\n", "groover_circuit.h(qreg_q[1])\n", "\n", "groover_circuit.draw('mpl')" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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08s4EqLyRf6ZkH9GilIuH2RARET0odLW1oa5uTkeP34MADA0NHwnz4on0hSCICA9PR2PHz+Gubk5tLW137oPE1giIqL3zNbWFgDEJJaIAHNzc/Gz8TZMYImIiN4ziUQCOzs7WFtbIzs7u6zDISpzOjo6xRp5lWMCS0REVEa0tbVL9EubiN7gTVxEREREpFGYwBIRERGRRmECS0REREQahQksEREREWkUJrBEREREpFGYwBIRERGRRmECS0REREQahQksEREREWkUJrBEREREpFGYwBIRERGRRmECS0REREQahQksEREREWkUJrBEREREpFGYwBIRERGRRmECS0REREQahQksEREREWkUJrBEREREpFGYwBIRERGRRmECS0REREQahQksEREREWkUJrBEREREpFGYwBIRERGRRmECS0REREQahQksEREREWkUJrBEREREpFGYwBIRERGRRmECS0REREQahQksEREREWkUJrBEREREpFGYwBIRERGRRmECS0REREQahQksEREREWkUJrBEREREpFGYwBIRERGRRmECS0REREQahQksEREREWkUJrBEREREpFGYwBIRERGRRmECS0REREQahQksEREREWkUJrBEREREpFGYwBIRERGRRmECS0REREQahQksEREREWkUJrBEREREpFGYwBIRERGRRmECS0REREQahQksEREREWkUJrBEREREpFGYwBIRERGRRmECS0REREQahQksEREREWkUJrBEREREpFGYwBIRERGRRmECS0REREQahQksEREREWkUJrBEREREpFGYwBIRERGRRmECS0REREQaReUE1tXVFStXrkRqaqo64yEiIiIiKpLKCezVq1cxevRo2NnZITAwELGxseqMi4iIiIioQConsElJSfjpp5/g7OyMTZs2wdPTE3Xr1sWiRYuQnJyszhiJiIiIiEQqJ7Dm5uYYO3Yszp8/j9OnT2Po0KF4+PAhJkyYgKpVq+Lzzz9HZGSkyoGdOXMGfn5+sLCwgJGREdzc3BAWFlbs/b28vCCRSIr89+uvvyrs4+TkVGjdESNGqNwWIiIiIlIfqToO0qxZMzRr1gw//fQTtmzZgvXr12Pbtm3Yvn07HBwcMGTIEAwaNAh2dnbFOl50dDR8fX2hq6uL3r17w8zMDDt37kTfvn2RkJCAqVOnvvUYgYGB8PLyUirP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+SR8ghURERERqUuxE1gnJyfxKVwlIZFIIJPJSrwfEREREVFBip3A9u/fX6UEloiIiIhInUq0jBYRERERUVnjTVxEREREpFGYwBIRERGRRuGjZImIiIhIo/BRskRERESkUfgoWSIiIiLSKHyULBERERFpFN7ERUREREQapdgjsIU5fvw4Nm7ciHPnziElJQVmZmZwdXXFF198gdatW6sjRiIiIiIikcoJrCAIGDlyJNasWQNBEAAAWlpayM3NxdmzZ7Fu3ToMGzYMK1as4BO8iIiIiEhtVJ5C8OOPP2L16tVo0KABtm3bhqSkJMhkMiQlJWHr1q2oX78+1qxZg0WLFqkzXiIiIiKq4CSCfPi0hFxcXJCTk4OLFy/C0NBQafvLly/RqFEjSKVS3Lhxo9SBaqLU1FSYmZkhJSUFpqamKh9n6GL1xVRa364MLusQFNS8HlzWIRARFUldvwuI6D8qj8Deu3cP3bt3LzB5BQBjY2N0794d9+7dUzk4IiIiIqL8VE5gq1atiszMzCLrvH79GlWrVlX1FERERERESlROYAcNGoStW7fi0aNHBW5/+PAhtmzZgiFDhqgcHBERERFRfsVeheDu3bsKr3v37o24uDi4urriq6++QuvWrWFtbY3Hjx/j2LFjWLp0KVq1aoXPPvtM7UETERERUcVV7ATWycmpwOWwBEHA1KlTCyzfs2cPIiIiIJPJShclEREREdH/FDuB7d+/P9dzJSIiIqIyV+wENjQ09B2GQURERERUPCrfxEVEREREVBaYwBIRERGRRin2FIKCpKWlYdmyZTh48CAePHiA169fK9WRSCSIj48vzWmIiIiIiEQqJ7BPnjyBu7s74uPjYWpqKj4qLysrCxkZGQAAe3t76OjoqC1YIiIiIiKVpxAEBwcjPj4emzZtwvPnzwEAX3/9NV69eoVTp07Bzc0NTk5OuHz5stqCJSIiIiJSOYHdu3cv2rdvj379+iktr9W8eXPs27cPCQkJCA4OLm2MREREREQilRPYhw8fwtXVVXytra0tTh0AAAsLC3Ts2BHbtm0rXYRERERERHmonMCamZkhOztbfG1hYYHExESFOqampnj06JHq0RERERER5aNyAlujRg0kJCSIr11dXREVFYVnz54BADIyMrBnzx44ODiUOkgiIiIiIjmVE1gfHx8cOnQI6enpAIDhw4fj8ePH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\n", "text/plain": [ "
" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Run the circuit on C12 simulator\n", "c12_groover_result = c12_simulator_backend_iswap.run(groover_circuit, shots=10000).result()\n", "c12_groover_counts = c12_groover_result.get_counts()\n", "\n", "iswap = {}\n", "for key, value in c12_groover_counts.items():\n", " iswap[key.strip()] = value\n", "\n", "aer_groover_result = backend_aer.run(groover_circuit, shots=10000).result()\n", "aer_groover_counts = aer_groover_result.get_counts()\n", "\n", "data = [iswap, aer_groover_counts]\n", "plot_histogram(data, legend=['C12 emulator', 'Perfect emulator'], title=\"Groover algorithm simulators comparison\", figsize=(5,5))" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.13" } }, "nbformat": 4, "nbformat_minor": 4 }